package bierki;

import java.awt.geom.Point2D;
import java.util.Vector;

public class Goniec extends Bierka {

	/**
	 * 
	 * @param obrazek - ścieżka do pliku z obrazkiem
	 * @param kolor - kolor z enuma (BIALY lub CZARNY)
	 * @param x - początkowa pozycja na tablicy os OX
	 * @param y - początkowa pozycja na tablicy os OY
	 */
	public Goniec(String obrazek,BierkaKolor kolor, int x, int y) {
		super(obrazek,BierkaTyp.GONIEC,kolor,x, y);
	}
	
	/**
	 * Parametry jak wyżej, konstruktor ma sens - królowa używa gońca i wieży dla sprawdzenia
	 * własnych ruchów, ta wieża i goniec nie mają jednak swojej fizycznej reprezentacji
	 * na planszy więc obrazki są niepotrzebne
	 * @param kolor - kolor z enuma
	 * @param x - początkowa pozycja x
	 * @param y - początkowa pozycja y
	 */
	public Goniec(BierkaKolor kolor, int x, int y) {
		super(BierkaTyp.GONIEC,kolor,x, y);
	}

	/**
	 * Metoda przeciążana z Bierka.java, sprawdza prawidłowośc ruchu na pozycje końcową xk yk
	 */
	@Override
	public boolean sprawdzRuch(Bierka[][] szachownica, int xk, int yk) {
		if (pozaSzachownica(xk,yk)) return false;
		
		if (sprawdzBicie(szachownica[xk][yk])) return false;
		
		int dx = xk - x; 
		int dy = yk - y;

		if (Math.abs(dx) != Math.abs(dy)) return false;
		
		int b = (int) Math.signum(dx);
		int p = (int) Math.signum(dy);
		
		for (int xi = x + b , yi = y + p; xi != xk ; xi += b, yi += p  ) {
			if (szachownica[xi][yi] != null) return false;
		}
		
		return true;
	}

	/**
	 * Sprawdza czy nie odsłaniamy własnego króla na bicie przy ruchu figury
	 */
	public boolean sprawdzRuch(Bierka[][] szachownica, int xk, int yk, Krol krol) {
		if (pozaSzachownica(xk,yk)) return false;
		
		if (sprawdzBicie(szachownica[xk][yk])) return false;
		
		int dx = xk - x; 
		int dy = yk - y;

		if (Math.abs(dx) != Math.abs(dy)) return false;
		
		int b = (int) Math.signum(dx);
		int p = (int) Math.signum(dy);
		
		for (int xi = x + b , yi = y + p; xi != xk ; xi += b, yi += p  ) {
			if (szachownica[xi][yi] != null) return false;
		}
		
		if (sprawdzSzach(szachownica,xk,yk,krol)) return false;
		
		return true;
	}

	/**
	 * obsolete, wygenerowana automatycznie
	 */
	
	@Override
	public Vector<Point2D> validateMove(Bierka[][] plansza, int xp, int yp) {
		// TODO Auto-generated method stub
		return null;
	}

	
	
	
}
